fix leaks when deleting wpts in filters. (#292)
authortsteven4 <tsteven4@users.noreply.github.com>
Fri, 11 Jan 2019 17:11:25 +0000 (10:11 -0700)
committerGitHub <noreply@github.com>
Fri, 11 Jan 2019 17:11:25 +0000 (10:11 -0700)
discard.cc
position.cc
trackfilter.cc

index 18fa362144f97f4a1ea6fbf68eb13d8d788814ac..b80e598d8a2ee98bdb19872ddd14ddd9af742bae 100644 (file)
@@ -91,17 +91,19 @@ void DiscardFilter::fix_process_wpt(const Waypoint* wpt)
     switch (what) {
     case wptdata:
       waypt_del(waypointp);
+      delete waypointp;
       break;
     case trkdata:
       track_del_wpt(head, waypointp);
+      delete waypointp;
       break;
     case rtedata:
       route_del_wpt(head, waypointp);
+      delete waypointp;
       break;
     default:
       return;
     }
-    delete waypointp;
   }
 }
 
index ea6cc94bffc3e74687c40abf5a3c31603f31aef8..6e6cf4c73f5cb1691c879b1499cacb45037af355 100644 (file)
@@ -87,9 +87,11 @@ void PositionFilter::position_runqueue(queue* q, int nelems, int qtype)
               break;
             case trkdata:
               track_del_wpt(cur_rte, comp[j]);
+              delete comp[j];
               break;
             case rtedata:
               route_del_wpt(cur_rte, comp[j]);
+              delete comp[j];
               break;
             default:
               break;
@@ -103,17 +105,19 @@ void PositionFilter::position_runqueue(queue* q, int nelems, int qtype)
         switch (qtype) {
         case wptdata:
           waypt_del(comp[i]);
+          delete comp[i];
           break;
         case trkdata:
           track_del_wpt(cur_rte, comp[i]);
+          delete comp[i];
           break;
         case rtedata:
           route_del_wpt(cur_rte, comp[i]);
+          delete comp[i];
           break;
         default:
           break;
         }
-        delete comp[i];
       }
     }
   }
index 04e9086ce652afcdf6cc78ac51c76e068f5ad6f9..6ca98ec080703d97323bcbaaad68ae39c76aed17 100644 (file)
@@ -1012,6 +1012,7 @@ void TrackFilter::trackfilter_segment_head(const route_head* rte)
           if (trackfilter_points_are_same(prev_wpt, wpt) &&
               trackfilter_points_are_same(wpt, next_wpt)) {
             track_del_wpt(const_cast<route_head*>(rte), wpt);
+            delete wpt;
             continue;
           }
         }